1. Field of the Invention
This invention relates to data storage subsystems and, more particularly, to block mapping methods and associated structures for mirroring N images of a block of data across M drives to more effectively combine mirroring and non-mirroring LUNs within a group of drives in an array storage subsystem.
2. Discussion of Related Art
Typical computing systems store data within devices such as hard disk drives, floppy drives, tape, compact disk, etc. These devices are otherwise known as storage devices. The storage capacity of these storage devices has rapidly increased as computing applications' demand for storage have increased. Simultaneous with the increase in capacity, computer applications and users have demanded increased performance. Computing applications have become highly dependent on high performance, high capacity storage devices. However, such increased dependency on storage devices underscores the need for increased reliability of such storage subsystems. Failure of such high capacity, high performance storage devices and subsystems can cripple vital computing applications.
Disk array storage systems provide both improved capacity and performance as compared to single disk devices. In a disk array storage system, a plurality of disk drives are used in a cooperative manner such that multiple disk drives are performing, in parallel, the tasks normally performed by a single disk drive. Striping techniques are often used to spread large amounts of information over a plurality of disk drives in a disk array storage system. So spreading the data over multiple disk drives improves perceived performance of the storage system in that a large I/O operation is processed by multiple disk drives in parallel rather than being queued awaiting processing by a single disk drive.
However, adding multiple disk drives to a storage system reduces the reliability of the overall storage system. In particular, spreading data over multiple disk drives in a disk array increases the potential for system failure. Failure of any of the multiple disk drives translates to failure of the storage system because the data stored thereon cannot be correctly retrieved.
RAID techniques are commonly used to improve reliability in disk array storage systems. RAID techniques generally configure multiple disk drives in a disk array in geometries that permit redundancy of stored data to assure data integrity in case of various failures. In many such redundant subsystems, recovery from many common failures can be automated within the storage subsystem itself due to the use of data redundancy, error codes, and so-called "hot spares" (extra disk drives which may be activated to replace a failed, previously active disk drive). The 1987 publication by David A. Patterson, et al., from University of California at Berkeley entitled A Case for Redundant Arrays of Inexpensive Disks (RAID), reviews the fundamental concepts of RAID technology.
RAID level zero, also commonly referred to as disk striping, distributes data stored on a storage subsystem across a plurality of disk drives to permit parallel operation of a plurality of disk drives thereby improving the performance of I/O write requests to the storage subsystem. Though RAID level zero functionality improves I/O write operation performance, reliability of the disk array subsystem is decreased as compared to that of a single large disk drive. To improve reliability of disk arrays, other RAID geometries for data storage include generation and storage of redundancy information to permit continued operation of the disk array through certain common failure modes of the disk drives in the disk array.
There are six other "levels" of standard RAID geometries which include redundancy information as defined in the Patterson publication. Other RAID geometries have been more recently adopted and utilize similar concepts. For example, RAID level six provides additional redundancy to enable continued operation even in the case of failure of two disk drives in a disk array.
The simplest array, a RAID level 1 system, comprises one or more disks for storing data and an equal number of additional "mirror" disks for storing copies of the information written to the data disks. The remaining RAID levels, identified as RAID levels 2, 3, 4 and 5 systems by Patterson, segment the data into portions for storage across several data disks. One or more additional disks are utilized to store error check or parity information. RAID level 6 further enhances reliability by adding additional redundancy information to permit continued operation through multiple disk failures. The methods of the present invention may be useful in conjunction with any of the standard RAID levels including level 0.
RAID storage subsystems typically utilize a control module (controller) that shields the user or host system from the details of managing the redundant array. The controller makes the subsystem appear to the host computer as one (or more), highly reliable, high capacity disk drive. In fact, the RAID controller may distribute the host computer system supplied data across a plurality of the small independent drives with redundancy and error checking information so as to improve subsystem reliability. The mapping of a logical location of the host supplied data to a physical location on the array of disk drives is performed by the controller in a manner that is transparent to the host system. RAID level 0 striping for example is transparent to the host system. The data is simply distributed by the controller over a plurality of disks in the disk array to improve overall system performance.
To further improve performance. RAID subsystems frequently provide large cache memory structures. The cache memory is associated with the control module such that the storage blocks on the disk array are mapped to blocks in the cache. This mapping is also transparent to the host system. The host system simply requests blocks of data to be read or written and the RAID controller manipulates the disk array and cache memory as required.
A RAID level 1 disk array storage system, as presently known in the art, comprises one or more disks for storing data and an equal number of additional duplicate or mirror disks for storing copies of the information written to the data disks.
RAID level 1 techniques as presently practiced generally use a pair of disk drives for mirroring of data. A first disk drive is used to store the original data and the second is used to mirror the data. Striping of data (also known as RAID level 0), as noted above, is often used to improve performance. It is therefore known in prior techniques to combine striping (RAID level 0) with mirroring (RAID level 1) to provide improved performance and improved reliability through redundancy.
Whether striped or non-striped, RAID level 1 as presently practiced utilizes a single duplicate copy of the data--a single mirror. Some present striped RAID level 1 implementations allow for an odd number of disk drives to be used in the RAID level 1 mirroring. However, such storage device still maintain only a single mirror copy of the stored data. Each striped block has a single mirrored block associated therewith. The striping may distribute the original and mirrored block over any number of disk drives so long as the original block and mirrored block are resident on different disk drives to assure the needed reliability.
RAID level 1 improves reliability as compared to RAID level 0 by adding the capability to mirror or copy data on duplicate disk drives. RAID level 0, also known as disk striping, distributes data across the disks in the array but does not provide any data redundancy.
RAID levels 2-6 utilize RAID level 0 striping techniques to distribute the data over the plurality of disk drives in the array. RAID levels 2-6 use redundancy information which requires less storage capacity as compared to RAID level 1 mirroring. Specifically, redundancy information such as bitwise parity exclusive-OR (XOR) computations are used to reconstruct the missing portions of a stripe lost due to a single disk failure. Storage of such redundancy information requires far less storage than complete mirroring of the original data.
RAID levels 2-6 differ from one another primarily in the geometry used for storing data on the disks of the array. RAID levels 2, 3, and 4, distribute data across the disks in the array and provide for blocks of redundancy information stored on an additional dedicated disk. For example, RAID 3 and 4 includes N+1 disks where N disks are used to store the data, and the additional disk is utilized to store parity information. In a RAID level 5 disk array, the data and parity information are distributed and interspersed across the N+1 disks. Each one of the N+1 disks within the array includes some blocks for storing data and some blocks for storing parity information. Raid level 6 uses N+2 disks and distributes data and redundancy information over all the drives. RAID level 6, much like level 5, distributes redundancy information over the disks in the managed array but uses additional redundancy information (e.g., two parity blocks corresponding to each stripe of data blocks). The additional redundancy information of RAID level 6 allows recovery from additional errors beyond that provided by other RAID levels.
3. Problems in the Art
In large RAID systems having a larger number of disk drives, the disk drives may be apportioned into groups or subsets. Each group is also referred to as a redundancy group, or logical unit (LUN), and is managed in accordance with a particular RAID management level and different portions of each disk may be members of different LUNs. Each such LUN essentially appears to the attached computer system users and applications to be a single, large, highly reliable disk drive.
In general, each LUN uses an equal number of blocks from each disk drive, which is a member of the LUN subset to define a stripe of data. In large systems, many such LUNs may be defined, each managed in accordance with a preferred RAID management level. For example, one LUN may be managed in accordance with RAID 3 techniques while another LUN may be managed in accordance with RAID 5 techniques.
As noted above, the RAID level 1 LUN requires at least a pair of disk drives with one disk drive providing a copy of the contents of the other. Even where a RAID level 1 is striped over an odd number of disk drives, the data (each block of a stripe) is mirrored on a pair of disk drives. Other RAID levels which use redundancy techniques other than mirroring do not permit use of merely two disk drives. Rather, the number of disk drives needed for the additional redundancy information is always less than the number used for storing the data. Because of these different mapping of data and geometry of RAID management, some present RAID disk array storage subsystems do not readily allow the combination of LUNs implementing mirroring and other redundancy algorithms. Many prior techniques are limited in their flexibility to configure both mirrored RAID level 1 LUNs and other RAID levels in the same storage subsystem. At a minimum, they are so limited with respect to mixing such varied geometries on the same physical drives. Some such prior techniques require that the number of disk drives used for a mirrored LUN be even. Where an odd number of disk drives is used in a particular group of the disk array, such prior techniques simply fail to utilize the storage space of the last disk drive. Such wasted storage space increases the effective cost of storage systems.
FIG. 6 is a block diagram depicting three disk drives 110.1 through 110.M on which a mirrored LUN 600 and a non-mirrored LUN 602 are defined in accordance with prior known techniques. As noted above, RAID parity techniques may be used in the non-mirrored LUN 602 to assure reliability of the stored data. A first portion of the stored data D.sub.0 610 and a second portion D.sub.1 612 are stored on drives 110.1 and 110.2, respectively. A redundancy portion P 614 is stored on the third disk drive 614. The mirrored LUN 600 does not utilize all drives because as dictated by some prior mirroring techniques which require only pairs of disk drives be utilized. Specifically, a data drive D 604 and a mirrored drive D' 606 contain the original data and the mirrored version thereof. Space 608 of LUN 600 is unused and wasted in such prior techniques.
Other RAID storage products partially resolve the above identified problem by allowing the mapping of blocks of data and their respective mirrored blocks over any number of disk drives. However, all such known systems are still limited to a single duplicate (mirrored) image of each data block. These systems require some flexibility in the mapping of blocks of data in the various RAID LUNs and may cause waste of space on certain disk drives of the array due to inflexibility in the configuration. Where, for example, the number of disk drives used for RAID level 1 mirrored LUN is odd, space on one of the disk drives may be wasted.
FIG. 7 is a block diagram descriptive of such other prior known mirroring techniques where space at the end of a mirrored LUN may be wasted. As shown in FIG. 7, three disk drives 110.1, 110.2 and 110.M are used for a mirrored LUN 700 on which blocks (portions) of the original data are striped over the three disk drives. In particular, block D.sub.0 702 and its mirror D.sub.0 ' 708 are stored on disk 110.1 and 110.2, respectively. In like manner, D.sub.1 714 and D.sub.1 '704, D.sub.2 '710 and D.sub.2 '716 and D.sub.3 '706 and D.sub.3 ' 712 are distributed over respective disk drives among 110.1 through 110.M. However, since the total number of blocks in the LUN 700 is odd, a block 718 at the end is wasted and remains unused.
It is therefore a problem in RAID storage subsystems to flexibly manage the storage space of the disk array to permit mixing of LUNs of different RAID levels. In particular, it is a problem to permit such mixing of different RAID level LUNs on the same physical drives of a disk array storage subsystem.